﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LeetCode
{
    public class _38CountAndSay : IRun
    {
        public void Run()
        {
            /*
               报数序列是一个整数序列，按照其中的整数的顺序进行报数，得到下一个数。其前五项如下：
               1.     1
               2.     11
               3.     21
               4.     12 11
               5.     11 12 21
               1 被读作  "one 1"  ("一个一") , 即 11。
               11 被读作 "two 1s" ("两个一"）, 即 21。
               21 被读作 "one 2",  "one 1" （"一个二" ,  "一个一") , 即 1211。
               给定一个正整数 n（1 ≤ n ≤ 30），输出报数序列的第 n 项。
             */


            string _Result = CountAndSay(10);
        }

        public string CountAndSay(int n)
        {
            if (n == 1)
                return "1";

            string _Origin = CountAndSay(n - 1);
            int _Count = 1;
            int _Len = _Origin.Length;
            var _Result = string.Empty;

            for (int i = 0; i < _Len; i++)
            {
                if (i + 1 == _Len || _Origin[i] != _Origin[i + 1])
                {
                    _Result += _Count.ToString() + _Origin[i];
                    _Count = 1;
                }
                else if (_Origin[i] == _Origin[i + 1])
                {
                    _Count++;
                }
            }
            return _Result;

        }
    }
}
